Skip to content

MSC4446: Allow moving the fully read marker to older events#4446

Open
SpiritCroc wants to merge 4 commits into
matrix-org:mainfrom
beeper:move-fully-read-backward
Open

MSC4446: Allow moving the fully read marker to older events#4446
SpiritCroc wants to merge 4 commits into
matrix-org:mainfrom
beeper:move-fully-read-backward

Conversation

@SpiritCroc

@SpiritCroc SpiritCroc commented Apr 2, 2026

Copy link
Copy Markdown

@SpiritCroc SpiritCroc changed the title MSC0000: Allow moving the fully read marker to older events MSC4446: Allow moving the fully read marker to older events Apr 2, 2026
@tulir tulir added proposal A matrix spec change proposal. Process state. A-Client Server Client-Server API kind:maintenance MSC which clarifies/updates existing spec needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. labels Apr 2, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implementation requirements:

  • Server that ignores attempts to roll back without the flag
  • Server that allows rolling back with the flag
  • Client that uses the flag to intentionally roll back m.fully_read
  • Testing to ensure old clients don't explode when m.fully_read rolls back

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As mentioned in comments further down, I can currently offer:

Furthermore, here some clients that didn't explode on initial testing yet when rolling the marker back:

  • SchildiChat Next (Element X Android base)
  • SchildiChat Android Legacy (Element Android Classic base)
  • SchildiChat Web (Element Web base, though on somewhat older 1.11.112 version)
  • Beeper Android & Desktop (at the time of writing not implementing this MSC yet)

@github-project-automation github-project-automation Bot moved this to Tracking for review in Spec Core Team Workflow Apr 2, 2026
@SpiritCroc SpiritCroc marked this pull request as ready for review April 7, 2026 06:49
@SpiritCroc

Copy link
Copy Markdown
Author

Synapse PR / server implementation: element-hq/synapse#19663

@SpiritCroc

Copy link
Copy Markdown
Author

SchildiChat Revenge implements this via SchildiChat/matrix-rust-sdk@e2d4ec2 / SchildiChat/ruma@54b2407 (client side code already allowed picking any message for setting the fully read marker, so only SDK-side usage of the flag was needed).

In practice the client currently only invokes the /receipt endpoint for this purpose, not /read_markers. I don't have a strong opinion on whether both endpoints should allow the new flags, but figured for consistency it makes sense to allow for both, to support clients which may want to prefer /read_markers over /receipt.

@anoadragon453 anoadragon453 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks fine overall to me just now. Currently providing a drive-by review as I review the Synapse PR.

Some small things below.

follow similar rules as other endpoints which imply a certain message order, such as the
[`/messages`](https://spec.matrix.org/v1.18/client-server-api/#get_matrixclientv3roomsroomidmessages) endpoint.

If `allow_backward` is set to `true`, servers should also accept event IDs that move the fully read marker back in time.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And if allow_backward is true and the provided event ID matches the current state?

Personally, for idempotency's sake, I would recommend returning a 200 as there is no change to the state anyhow.


Unstable implementations should use `com.beeper.allow_backward` in place of `allow_backward` in the request body.

Servers can promote support for this MSC in `/_matrix/client/versions` by setting the flag `com.beeper.msc4446`.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Servers can promote support for this MSC in `/_matrix/client/versions` by setting the flag `com.beeper.msc4446`.
Servers can promote support for this MSC in `/_matrix/client/versions` by setting the flag `com.beeper.msc4446` to `true`.

Unstable implementations should use `com.beeper.allow_backward` in place of `allow_backward` in the request body.

Servers can promote support for this MSC in `/_matrix/client/versions` by setting the flag `com.beeper.msc4446`.
The feature flag should continue to be advertised after the MSC is accepted until the server advertises support for the stable spec release that includes this MSC.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And presumably clients will have to use the unstable prefix in the request body unless they see the server advertising support for the stable spec release containing these changes?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-Client Server Client-Server API kind:maintenance MSC which clarifies/updates existing spec needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. proposal A matrix spec change proposal. Process state.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants